package exercise.day04;

import java.util.Random;

public class _04_方法定义Exercise {

    /**
     * 定义一个方法，实现：
     *   参数：传入一个整数数组
     *   返回：无
     *   功能：打印这个数组中每一个元素  [3,5,10,8]
     */
    static void printArray(int[] arr){
        System.out.print("[");
        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1) {
                System.out.print(arr[i]);
            }else{
                System.out.print(arr[i]+",");
            }
        }
        System.out.println("]");
    }


    /**
     * 定义一个方法，实现：
     * 参数：传入一个整数数组，和一个整数
     * 返回：这个整数是否存在于数组中
     * [3,5,7,16,20]      16
     */
    static boolean ifExists(int[] arr, int x) {

        for (int i = 0; i < arr.length; i++) {
            // 如果某个i脚标上的元素等于x，说明这个数组中包含x
            if (arr[i] == x) {
                // 那么，立刻返回一个结果：true
                return true;
            }
        }

        // 如果上面的循环走完了还没发现x，才会到这句话来
        return false;
    }


    /**
     * 定义一个方法，实现
     *    参数：传入一个整数数组
     *    返回：返回这个数组中的所有奇数
     *
     *   超级经典！！！！！！
     *   做10遍！！！！！！！！！！
     *
     */
    static int[] findOdds(int[] arr){
        // 先求出arr中的奇数的个数
        int count = 0;
        for (int i=0;i<arr.length;i++){
            // 如果第i个元素是奇数，那么count加1
            if(arr[i] % 2 == 1){
                count++;
            }
        }

        // 创建一个存结果的数组
        int[] resultArr = new int[count];

        // 然后，遍历传入的数组arr，判断第i个元素是否为奇数
        int j = 0;
        for(int i=0;i<arr.length;i++){
            // 如果是，则将这个数装入 结果数组
            if(arr[i] % 2 == 1){
                resultArr[j] = arr[i];
                j++;
            }
            // 如果不是，啥也不做，继续下一轮
        }

        // 返回结果数组
        return resultArr;
    }

    /**
     * 定义一个方法，实现
     *     参数：传入两个整数数组
     *     返回：两个数组中所有元素的两两组合
     * 比如 [1,3,5,6]  和 [2,4,6]
     * 返回 ["1-2","1-4","1-6","3-2","3-4","3-6",....]
     *
     * 利用一个双层嵌套循环即可实现
     */
    static String[] arrayCombine(int[] arr1,int[] arr2){
        // 创建一个用于装结果数据的数组
        String[] result = new String[arr1.length * arr2.length];

        int k = 0;
        for(int i=0;i<arr1.length;i++){

            for(int j=0;j<arr2.length;j++){

                result[k] = arr1[i]+"-"+arr2[j];
                k++;
            }
        }

        return result;
    }

    /**
     * 定义一个方法，实现
     *     参数：传入两个整数数组 arr1 和arr2
     *     返回： 如果arr1的总和>arr2的总和 ，返回1
     *           如果arr1的总和=arr2的总和，返回0
     *           如果arr1的总和<arr2的总和，返回-1
     */

    // 给一个数组，返回数组的总和
    static int arraySum(int[] arr){
        int sum = 0;
        for(int i=0;i<arr.length;i++){
            sum += arr[i];
        }
        return sum;
    }
    // 给两个数组，返回两个数组的总和的大小比较结果
    static int compareArraySum(int[] arr1,int[] arr2){
        int result = 0;

        // 求数组1的总和
        int sum1 = arraySum(arr1);
        // 求数组2的总和
        int sum2 = arraySum(arr2);

        // 比较两个总和的大小情况，来给result赋值
        if(sum1>sum2){
            result = 1;
        }else if(sum1 <sum2){
            result = -1;
        }else {
            result = 0;
        }

        // 返回result作为整个方法的返回值
        return result;
    }


    /**
     * 定义一个方法，实现
     *     参数：传入一个整数i，
     *     返回：包含i个随机数的数组
     */
    static int[] genRandomInts(int num){
        int[] result = new int[num];

        for(int i=0;i<num;i++) {
            Random random = new Random();
            int d = random.nextInt(1000);
            result[i] = d;
        }

        return result;
    }


    public static void main(String[] args) {

        int[] arr1 = {3,5,9};
        int[] arr2 = {6,8};

        String[] result = arrayCombine(arr1,arr2);
        for(int i=0;i<result.length;i++){
            System.out.println(result[i]);
        }


        System.exit(1);

        int[] arr = {0,1,2,3,4,8,10,12,11,9,7};
        // 调用找奇数的方法
        int[] odds = findOdds(arr);
        // 调用打印数组的方法
        printArray(odds);

        // 调用随机数生成方法
        int[] ints = genRandomInts(8);
        // 打印结果
        printArray(ints);


    }

}
